package basic_grammar

import (
	"fmt"
	"strconv"
	"strings"
)

func StrTest() {
	//字符串通常被解释为采用UTF8编码的Unicode码点 (rune)序列
	s := "hello,world"
	// 返回字符串长度
	fmt.Println(len(s))
	// 可用于循环和切片
	for i := 0; i < len(s); i++ {
		fmt.Println(string(s[i]))
	}
	fmt.Println(s[6:])

	// 长字符串不转译可用``
	longStr := `你好\n你是谁
	从哪里来\\\\t
	到哪里去`
	fmt.Println(longStr)
}

//string与其他基本类型不能直接转换
func ErrStrTrans() {
	a := 1
	b := string(a)
	fmt.Printf("类型是%T,值是%v", b, b)
	//c := "1"
	//d := int64(c)
	//fmt.Println(d)
}

// 基本数据类型转string
func Basic2Str() {
	//fmt.Sprintf()
	a := 1
	b := fmt.Sprintf("%v", a)
	fmt.Printf("%T,%v\n", b, b)
	//strconv.Format
	c := .127
	d := strconv.FormatFloat(c, 'f', 2, 64)
	fmt.Printf("%T,%v\n", d, d)
	//Itoa是FormatInt(i, 10) 的简写
	f := strconv.Itoa(a)
	fmt.Printf("%T,%v\n", f, f)
}

// string 转其他基本数据类型

//注意: 当String不能转换成有效的数据类型时,会转换成该类型的默认值

func Str2Basic() {
	//strconv.Parse
	a := "true"
	b, _ := strconv.ParseBool(a)
	fmt.Printf("%T,%v\n", b, b)
	c := ".9281009"
	d, _ := strconv.ParseFloat(c, 64)
	fmt.Printf("%T,%v\n", d, d)

	//Atoi是ParseInt(s, 10, 0)的简写
	//func Atoi(s string) (i int, err error)

}

func BuildString() {
	var a strings.Builder
	a.WriteString("asdfa")
	a.WriteString("asdf")
	a.String()

}
